package com.ruoyi.user.service;

import com.ruoyi.common.core.domain.entity.AppUser;
import com.ruoyi.common.core.domain.model.LoginAppUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.domain.vo.AppUserVO;

import java.util.List;

/**
 * 用户 业务层
 *
 * @author ruoyi
 */
public interface IAppUserService {

    /**
     * 通过用户账号查询用户
     *
     * @param userName 用户账号
     * @return 用户对象信息
     */
    AppUser selectAppUserByUserName(String userName);

    /**
     * 通过用户账号查询用户
     *
     * @param openId 微信小程序openId
     * @return 用户对象信息
     */
    AppUser selectAppUserByOpenId(String openId);

    /**
     * 通过userId查询用户
     *
     * @param userId 用户id
     * @return 用户对象信息
     */
    AppUser selectAppUserByUserId(Long userId);

    /**
     * 通过userId查询用户
     *
     * @param userIds 用户id
     * @return 用户对象信息
     */
    List<AppUser> selectAppUserByUserIds(List<Long> userIds);

    /**
     * 修改用户信息
     *
     * @param appUser 用户信息
     * @return 结果
     */
    int updateAppUser(AppUser appUser);

    /**
     * 密码校验
     *
     * @param password 明文
     * @param salt     盐
     * @param hashPwd  密文
     * @return boolean
     */
    boolean checkPassword(String password, String salt, String hashPwd);

    /**
     * 新增用户
     *
     * @param appUser
     * @return
     */
    int insertAppUser(AppUser appUser);

    /**
     * 切换区服
     *
     * @param appUser
     * @return
     */
    AppUser switchoverRegionId(AppUser appUser, Long regionId);

    /**
     * 绑定QQ
     *
     * @param appUser
     * @param qqCode
     * @return
     */
    AppUser bindQQ(AppUser appUser, String qqCode);

    /**
     * 查询用户信息列表
     *
     * @param appUser 用户信息
     * @return 用户信息集合
     */
    List<AppUserVO> selectAppUserList(AppUser appUser);

    /**
     * @param userId
     * @param status
     * @return
     */
    int updateStatusByUserId(Long userId, Integer status);

    /**
     * 绑定手机号
     *
     * @param loginAppUser
     * @param phoneNumber
     */
    AppUser bindPhoneNumber(LoginAppUser loginAppUser, String phoneNumber);
}
